package dx.util;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 上海合合识别工具类
 *
 * @author zhanghao
 * @date 2021年11月17日
 * @Copyright 版权由上海卓繁信息技术股份有限公司拥有
 */
public class TextinOcrUtil {

//    enum TextinOcrErrInfo {
//40101	x-ti-app-id 或 x-ti-secret-code 为空
//40102	x-ti-app-id 或 x-ti-secret-code 无效，验证失败
//40003	余额不足，请充值后再使用
//40004	参数错误，请查看技术文档，检查传参
//40007	机器人不存在或未发布
//40008	机器人未开通，请自行开通后再使用
//40303	文件类型不支持
//40302	上传文件大小不符
//40301	图片类型不支持
//40304	图片尺寸不符，图像宽高须介于 20 * 20 和 10000 * 100000 （像素）之间
//30203	基础服务故障，请稍后重试
//500	服务器内部错误
//    }

    /** 成功标识 */
    public static String SUCCESS = "200";

    public static String RETURN_CODE = "code";

    /** 配置异常提示 */
    public static final String BAIDU_CONFIG_MESSAGE = "请按照部署手册配置OCR接口参数";

    /** 合合自定义ocr模板识别地址 */
    public static String TEXTIN_TEXT_READ_URL;

    public static String X_TI_APP_ID;

    public static String X_TI_SECRET_CODE;

    static {
        PropertiesUtil pu = new PropertiesUtil("interface_param.properties");
        X_TI_APP_ID = pu.readProperty("x-ti-app-id");
        X_TI_SECRET_CODE = pu.readProperty("x-ti-secret-code");
        TEXTIN_TEXT_READ_URL = pu.readProperty("textin.ocr.text.read.url");
    }

    /**
     * 读取文件二进制信息
     * @param path 文件路径
     * @return 二进制
     */
    public static byte[] readFile(String path) {
        String imgFile = path;
        InputStream in = null;
        byte[] data = null;
        try {
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }


    /**
     * 上海合合调用接口方法
     * @param inputUrl 合合地址
     * @param imgData 图片二进制文件
     * @param appId
     * @param secretCode
     * @return
     */
    public static String doPostBinary(String inputUrl, byte[] imgData, String appId, String secretCode) {
        BufferedReader in = null;
        DataOutputStream out = null;
        String result = "";
        try {
            URL realUrl = new URL(inputUrl);
            HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection();
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type", "application/octet-stream");
            conn.setRequestProperty("x-ti-app-id", appId);
            conn.setRequestProperty("x-ti-secret-code", secretCode);
            conn.setRequestProperty("Charsert", "UTF-8");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 设置请求方式
            conn.setRequestMethod("POST");
            out = new DataOutputStream(conn.getOutputStream());
            out.write(imgData);

            out.flush();
            out.close();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                line = new String(line.getBytes(), "utf-8");
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常！" + e);
            e.printStackTrace();
        }
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }


//    /**
//     * 调用合合接口得到的结取出item_list
//     * @param result
//     * @return
//     */
//    public static JSONArray resultToArray(String result){
//        if (StringUtils.isEmpty(result)) {
//            throw new ServiceException("ocr自定义模板识别,调用上海合合ocr接口异常。");
//        }
//        Map<String, Object> map = JSONObject.parseObject(result);
//        String errorCode = map.get(TextinOcrUtil.RETURN_CODE).toString();
//        System.out.println("=======================================errorCode="+errorCode);
//        if (!TextinOcrUtil.SUCCESS.equals(errorCode)) {
//            throw new ServiceException("ocr自定义模板识别,调用上海合合ocr接口异常。" + errorCode);
//        }
//        // 调用成功
//        JSONObject resultJsonObj = JsonUtil.objToJSONObject(map.get("result"));
//        return JsonUtil.objToJSONArray(resultJsonObj.get("item_list"));
//    }
}
